package com.example.turismo_pucela;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import android.content.Context;

public class LeerXML {

	public ArrayList<Lugar> leerLugares(Context context, String xml)
			throws XmlPullParserException, IOException {
		// XML PARSER:

		ArrayList<Lugar> lugares = null;

		XmlPullParserFactory pullParserFactory = XmlPullParserFactory.newInstance();
		XmlPullParser parser = pullParserFactory.newPullParser();

		InputStream in_s = context.getAssets().open(xml);
		parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
		parser.setInput(in_s, null);

		int eventType = parser.getEventType();
		Lugar lugar = null;

		while (eventType != XmlPullParser.END_DOCUMENT) {
			String campo = null;
			switch (eventType) {
			case XmlPullParser.START_DOCUMENT:
				lugares = new ArrayList<Lugar>();
				break;
			case XmlPullParser.START_TAG:
				campo = parser.getName();
				if (campo.equalsIgnoreCase("lugar")) {
					lugar = new Lugar();
				} else if (lugar != null) {
					if (campo.equalsIgnoreCase("id")) {
						String id = parser.nextText();
						lugar.setID(Integer.parseInt(id));
					} else if (campo.equalsIgnoreCase("imagen")) {
						lugar.setImagen(parser.nextText());
					} else if (campo.equalsIgnoreCase("nombre")) {
						lugar.setNombre(parser.nextText());
					} else if (campo.equalsIgnoreCase("descripcion")) {
						lugar.setDescripcion(parser.nextText());
					} else if (campo.equalsIgnoreCase("x")) {
						lugar.setX(Double.parseDouble(parser.nextText()));
					} else if (campo.equalsIgnoreCase("y")) {
						lugar.setY(Double.parseDouble(parser.nextText()));
					}
				}
				break;
			case XmlPullParser.END_TAG:
				campo = parser.getName();
				if (campo.equalsIgnoreCase("lugar") && lugar != null) {
					lugares.add(lugar);
				}
			}
			eventType = parser.next();
		}
		return lugares;
	}

	public ArrayList<Ruta> leerRutas(Context context, String xml) throws XmlPullParserException, IOException {
		// XML PARSER:

		ArrayList<Lugar> lugares = null;
		if (xml.equalsIgnoreCase("misrutas.xml")) {
			lugares = this.leerLugares(context, "mislugares.xml");
		} else {
			lugares = this.leerLugares(context, "lugares.xml");
		}
		ArrayList<Ruta> rutas = null;
		ArrayList<Lugar> lugaresDeRuta = null;

		XmlPullParserFactory pullParserFactory = XmlPullParserFactory.newInstance();
		XmlPullParser parser = pullParserFactory.newPullParser();

		InputStream in_s = context.getAssets().open(xml);
		parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
		parser.setInput(in_s, null);

		int eventType = parser.getEventType();
		Ruta ruta = null;

		while (eventType != XmlPullParser.END_DOCUMENT) {
			String campo = null;
			switch (eventType) {
			case XmlPullParser.START_DOCUMENT:
				rutas = new ArrayList<Ruta>();
				break;
			case XmlPullParser.START_TAG:
				campo = parser.getName();
				if (campo.equalsIgnoreCase("ruta")) {
					ruta = new Ruta();
					lugaresDeRuta = new ArrayList<Lugar>();
				} else if (ruta != null) {
					if (campo.equalsIgnoreCase("id")) {
						ruta.setID(Integer.parseInt(parser.nextText()));
					} else if (campo.equalsIgnoreCase("nombre")) {
						ruta.setNombre(parser.nextText());
					} else if (campo.equalsIgnoreCase("descripcion")) {
						ruta.setDescripcion(parser.nextText());
					} else if (campo.equalsIgnoreCase("lugar")) {
						Lugar lugar = null;

						int idDelLugar = Integer.parseInt(parser.nextText());

						for (int i = 0; i < lugares.size(); i++) {
							if (lugares.get(i).getID() == idDelLugar) {
								lugar = lugares.get(i);
							}
						}

						lugaresDeRuta.add(lugar);
					}
				}
				break;
			case XmlPullParser.END_TAG:
				campo = parser.getName();
				if (campo.equalsIgnoreCase("ruta") && ruta != null) {
					rutas.add(ruta);
				} else if (campo.equalsIgnoreCase("lugares")) {
					ruta.setLugares(lugaresDeRuta);
				}
			}
			eventType = parser.next();
		}
		return rutas;
	}
	
	public ArrayList<Lugar> leerMisLugares(Context context, String fichero)
			throws XmlPullParserException, IOException {
		// XML PARSER:

		ArrayList<Lugar> lugares = null;

		XmlPullParserFactory pullParserFactory = XmlPullParserFactory
				.newInstance();
		XmlPullParser parser = pullParserFactory.newPullParser();

		BufferedReader bf = new BufferedReader(new FileReader(new File(context.getFilesDir() + File.separator + fichero)));
		parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
		//parser.setInput(in_s, null);
		parser.setInput(bf);

		int eventType = parser.getEventType();
		Lugar lugar = null;

		while (eventType != XmlPullParser.END_DOCUMENT) {
			String campo = null;
			switch (eventType) {
			case XmlPullParser.START_DOCUMENT:
				lugares = new ArrayList<Lugar>();
				break;
			case XmlPullParser.START_TAG:
				campo = parser.getName();
				if (campo.equalsIgnoreCase("lugar")) {
					lugar = new Lugar();
				} else if (lugar != null) {
					if (campo.equalsIgnoreCase("id")) {
						String id = parser.nextText();
						lugar.setID(Integer.parseInt(id));
					} else if (campo.equalsIgnoreCase("imagen")) {
						lugar.setImagen(parser.nextText());
					} else if (campo.equalsIgnoreCase("nombre")) {
						lugar.setNombre(parser.nextText());
					} else if (campo.equalsIgnoreCase("descripcion")) {
						lugar.setDescripcion(parser.nextText());
					} else if (campo.equalsIgnoreCase("x")) {
						lugar.setX(Double.parseDouble(parser.nextText()));
					} else if (campo.equalsIgnoreCase("y")) {
						lugar.setY(Double.parseDouble(parser.nextText()));
					}
				}
				break;
			case XmlPullParser.END_TAG:
				campo = parser.getName();
				if (campo.equalsIgnoreCase("lugar") && lugar != null) {
					lugares.add(lugar);
				}
			}
			eventType = parser.next();
		}
		return lugares;
	}
}